1
'--------------------------------------------------------------------------
3 ' Copyright (c) Microsoft Corporation. All rights reserved.
7 '--------------------------------------------------------------------------
10 Imports System
.Collections
.Generic
11 Imports System
.Threading
.Tasks
16 ' NOTE: Synchronous .Wait() calls added only for demo purposes
18 ' Single async request
19 Download("http://www.microsoft.com").ContinueWith(AddressOf CompletedDownloadData
).Wait()
21 ' Single async request with timeout
22 Download("http://www.microsoft.com").WithTimeout(New TimeSpan(0, 0, 0, 0, 1)).ContinueWith(AddressOf CompletedDownloadData
).Wait()
24 ' Concurrent async requests
25 Task
.Factory
.ContinueWhenAll(
27 Download("http://blogs.msdn.com/pfxteam"),
28 Download("http://blogs.msdn.com/nativeconcurrency"),
29 Download("http://exampleexampleexample.com"),
30 Download("http://msdn.com/concurrency"),
31 Download("http://bing.com")
32 }, AddressOf ConcurrentTasksCompleted
).Wait()
34 ' Serial async requests
35 Task
.Factory
.TrackedSequence(
36 Function() Download("http://blogs.msdn.com/pfxteam"),
37 Function() Download("http://blogs.msdn.com/nativeconcurrency"),
38 Function() Download("http://exampleexampleexample.com"),
39 Function() Download("http://msdn.com/concurrency"),
40 Function() Download("http://bing.com")
41 ).ContinueWith(AddressOf SerialTasksCompleted
).Wait()
45 Console
.WriteLine("Press <enter> to exit.")
49 Function Download(ByVal url
As String) As Task(Of
Byte())
50 Dim wc
As New WebClient
51 Return wc
.DownloadDataTask(url
)
54 Sub CompletedDownloadData(ByVal task
As Task(Of
Byte()))
55 If task
.Status
= TaskStatus
.RanToCompletion
Then
56 Console
.WriteLine("Request succeeded: {0}", task
.Result
.Length
)
57 ElseIf task
.Status
= TaskStatus
.Faulted
Then
58 Console
.WriteLine("Request failed: {0}", task
.Exception
.InnerException
)
59 ElseIf task
.Status
= TaskStatus
.Canceled
Then
60 Console
.WriteLine("Request was canceled")
64 Sub SerialTasksCompleted(ByVal tasks
As Task(Of
IList(Of Task
)))
65 Dim failures
= tasks
.Result
.Where(Function(t
) t
.Exception IsNot
Nothing).Count()
66 Console
.WriteLine("Serial result: {0} successes and {1} failures", tasks
.Result
.Count() - failures
, failures
)
69 Sub ConcurrentTasksCompleted(ByVal tasks
As Task(Of
Byte())())
70 Dim failures
= tasks
.Where(Function(t
) t
.Exception IsNot
Nothing).Count()
71 Console
.WriteLine("Concurrent result: {0} successes and {1} failures", tasks
.Length
- failures
, failures
)